// src/controllers/index.controller.js
import User from "../models/user.model.js";

/**
 * 获取所有用户。
 * @param {Object} req - 请求对象。
 * @param {Object} res - 响应对象。
 */
export const getUsers = async (req, res) => {
  try {
    const users = await User.findAll();
    res.sendSuccess(200, 'Users retrieved successfully', users);
  } catch (error) {
    res.sendError(500, 'Failed to retrieve users', error.message);
  }
};

/**
 * 根据用户 ID 获取用户。
 * @param {Object} req - 请求对象，包含用户 ID。
 * @param {Object} res - 响应对象。
 */
export const getUserById = async (req, res) => {
  const id = parseInt(req.params.id, 10);
  try {
    const user = await User.findById(id);
    if (user) {
      res.sendSuccess(200, 'User retrieved successfully', user);
    } else {
      res.sendError(404, 'User not found');
    }
  } catch (error) {
    res.sendError(500, 'Failed to retrieve user', error.message);
  }
};

/**
 * 创建新用户。
 * @param {Object} req - 请求对象，包含用户数据。
 * @param {Object} res - 响应对象。
 */
export const createUser = async (req, res) => {
  try {
    const { name, email } = req.body;
    // 检查用户是否已存在
    const existingUser = await User.findByEmail(email);
    if (existingUser) {
      return res.sendError(409, 'User with this email already exists');
    }
    const newUser = await User.create({ name, email });
    res.sendSuccess(201, 'User created successfully', newUser);
  } catch (error) {
    res.sendError(500, 'Failed to create user', error.message);
  }
};

/**
 * 根据用户 ID 更新用户信息。
 * @param {Object} req - 请求对象，包含用户 ID 和要更新的数据。
 * @param {Object} res - 响应对象。
 */
export const updateUser = async (req, res) => {
  const id = parseInt(req.params.id, 10);
  const { name, email } = req.body;
  try {
    // 检查新的 email 是否已经被其他用户使用
    if (email) {
      const existingUser = await User.findByEmail(email);
      if (existingUser && existingUser.id !== id) {
        return res.sendError(409, 'User with this email already exists');
      }
    }

    const updatedUser = await User.updateById(id, { name, email });
    if (updatedUser) {
      res.sendSuccess(200, 'User updated successfully', updatedUser);
    } else {
      res.sendError(404, 'User not found');
    }
  } catch (error) {
    res.sendError(500, 'Failed to update user', error.message);
  }
};

/**
 * 根据用户 ID 删除用户。
 * @param {Object} req - 请求对象，包含用户 ID。
 * @param {Object} res - 响应对象。
 */
export const deleteUser = async (req, res) => {
  const id = parseInt(req.params.id, 10);
  try {
    await User.deleteById(id);
    res.sendSuccess(200, 'User deleted successfully');
  } catch (error) {
    res.sendError(500, 'Failed to delete user', error.message);
  }
};